C++中输出流运算符 "<<" 比条件运算符 " ? :"的优先级高吗?

来源:百度知道 编辑:UC知道 时间:2024/07/04 04:19:52
代码如下:
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;

int d=a>b?a:b; //求a和b中较大的
cout<< d>c ? d : c <<endl; //这样编译就出错
return 0;
}

上面如果把 d>c ? d : c 两边加上括号编译就不会错了。

请高手指点!
多谢!

事实上左移是比?优先级高的,但是这个问题不在于此。
编译错误是这样的(G++):
:: === test, Debug ===
error: no match for 'operator>' in '(&std::cout)->std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](d) > c'
E:\cppWorkspace\test\main.cpp:9: error: invalid operands of types `int' and `<unknown type>' to binary `operator<<'
:: === Build finished: 2 errors, 0 warnings ===

说明编译器认为: 在重载的<<定义中不能匹配operator<
则我们不能就这样输出,编译器没有将 d>c ? d : c看成一个表达式,而是一段输出。

加了括号不就是变成了一个完整表达式了

?:的优先级高于=
低于<<
这就是原因。

编译器d>c ? d : c看成一段输出!!!!!